import java.util.Scanner;

public class Practice1 {
    //https://www.nowcoder.com/practice/82297b13eebe4a0981dbfa53dfb181fa?tpId=230&tqId=39762&ru=/exam/oj
    //区间动态规划题, 略难开始没做出来
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        char[] ss = sc.next().toCharArray();
        int n = ss.length;
        int[][] dp = new int[n + 1][n + 1];
        int maxLen = 0;
        for(int i = n - 1;i >= 0;i--){
            for(int j = 1;j <= n;j++){
                //这里就是为什么是j - 1, 我是先写了 j, 发现运行错误, 所以发现了索引的问题 
                if(i > j - 1){
                    dp[i][j] = 0;
                }else if(i == j - 1){
                    dp[i][j] = 1;
                }else{
                    /*这边的ss[i] == ss[j - 1]一定要搞清楚, 因为我们是在最下面和最左边补充了, 从第i- 1行开始遍历
                      所以在ss的字符映射不需要改变, 但是j行是从1开始遍历, 所以所有的 j 都要进行改变
                
                    */
                    if(ss[i] == ss[j - 1]){
                        dp[i][j] = dp[i + 1][j - 1] + 2;
                    }else{
                        dp[i][j] = Math.max(dp[i][j - 1],dp[i + 1][j]);
                    }
                }
                maxLen = Math.max(maxLen,dp[i][j]);
            }
        }

        System.out.print(maxLen);
    }
}